﻿#pragma once

using namespace System;
//using namespace System::Collections::Generic;
//using namespace System::Text;

namespace $RootNamespace$
{

	public ref class $CLRRequest$
	{
	private:
		System::Object ^_data;

	public:
		property int Target
		{
			int get();
		}
	internal:
		$CLRRequest$(System::Object ^data);
	};
	// "$CLRHandler$" 
	public ref class $CLRHandler$ abstract
	{
	protected:
		$CLRHandler$ ^successor;
		virtual bool CanHandle($CLRRequest$^) abstract;
	internal:
		static void Test();
	public:
		void SetSuccessor($CLRHandler$ ^successor);

		virtual void HandleRequest($CLRRequest$^) abstract;
	};

	// "$CLRConcreteHandlerA$" 
	public ref class $CLRConcreteHandlerA$ : $CLRHandler$
	{
	protected:
		virtual bool CanHandle($CLRRequest$^) override;
	public:
		virtual void HandleRequest($CLRRequest$ ^request) override;
	};

	// "$CLRConcreteHandlerB$" 
	public ref class $CLRConcreteHandlerB$ : $CLRHandler$
	{
	protected:
		virtual bool CanHandle($CLRRequest$^) override;
	public:
		virtual void HandleRequest($CLRRequest$ ^request) override;
	};

	// "$CLRConcreteHandlerC$" 
	public ref class $CLRConcreteHandlerC$ : $CLRHandler$
	{
	protected:
		virtual bool CanHandle($CLRRequest$^) override;
	public:
		virtual void HandleRequest($CLRRequest$ ^request) override;
	};

}
